<?php


require_once(dirname(__FILE__).'/../../common/log.php');
require_once(dirname(__FILE__).'/../../common/defines.php');
require_once(dirname(__FILE__).'/../../common/return.php');
require_once(dirname(__FILE__).'/../../database/mysql.class.php');
require_once(dirname(__FILE__).'/../../database/redis.class.php');

require_once(dirname(__FILE__).'/common.php');


$body  = file_get_contents('php://input');   
logd("recv: ".$body);

$data  = json_decode($body, true);
if ((!isset($data['time'])) || (!isset($data['kefuId'])))
{
    loge("params error: ".$body);

    failure(ERR_PARAM);
}

$kefuId  = $data['kefuId'];
$userId  = 0;

//连接数据库
$mysql  = new mysqldb();
$ret    = $mysql->open_db(['dbname' => 'love-hole']);
if ($ret === FAILURE)
{
    failure(ERR_SYSTEM);
}

$redis  = new RedisUtils();
$redis->select(7);
//（！！！！客服分数值不能为 0，因为php会根据该值是否为empty判断客服是否在线！！！！）
//（！！！！客服分数值不能为 0，因为php会根据该值是否为empty判断客服是否在线！！！！）
//（！！！！客服分数值不能为 0，因为php会根据该值是否为empty判断客服是否在线！！！！）
$redis->zadd("server:online", 1, $kefuId);

do
{
    //从待分配用户列表中取出一个用户
    $userId  = $redis->lpop("server:waiting");
    if (empty($userId))
    {
        break;
    }

    //将当前用户分配给当前客服。分配失败则说明该用户已分配给其他客服（比如另一个客服刚好主动联系了该用户）
    $ret  = $redis->hsetnx("server:current", $userId, $kefuId);
    if (empty($ret))
    {
        continue;
    }

    //获取当前用户未被其他客服回复的消息，重新发送给当前客服
    $ret  = recv_other_message($mysql, $userId, $kefuId);
    //增加当前客服分数
    if ($ret > 0)
    {
        $redis->zincrby("server:online", $ret, $kefuId);
    }

    usleep(10);

} while (!empty($userId));

success();
